<?php
require_once 'libsybase.php.inc';

function verificar_instalacion(){
	if(!array_key_exists('sybmas.installation.installed',$_SESSION) || !$_SESSION['sybmas.installation.installed']){
		$isNew=true;
		$isInstalled=true;
		
		$tables=array('sybmas_accionPermiso','sybmas_modulo','sybmas_opcionModulo','sybmas_permisoObjeto',
			'sybmas_respaldo','sybmas_rolesmodulo','sybmas_rolesOpcionModulo','sybmas_tipoPermiso','sybmas_tipoRespaldo');

		$connection=start_sybmas_connection();
		$query="SELECT name FROM ".
		SYBMAS_DATABASE_NAME."..sysobjects ".
			"WHERE name LIKE 'sybmas_%'";
			
		$result=sybase_query($query,$connection);
		$tables_in_db=array();
		while($data=sybase_fetch_array($result)){
			$tables_in_db[]=$data['name'];
		}

		foreach($tables as $name){
			
			$index=array_search($name,$tables_in_db);
			if(!is_bool($index)){
				$isNew=false;
				//echo "$name <img src='".IMG_URI."/tick.png' alt='Si'><br>";
			}else{
				$isInstalled=false;
				//echo "$name <img src='".IMG_URI."/cross.png' alt='No'><br>";
			}			
		}
		
		$_SESSION['sybmas.installation.new']=$isNew;
		$_SESSION['sybmas.installation.installed']=$isInstalled;

	}
}

function verificar_inicio_sesion(){
	session_set_cookie_params(SYBMAS_MAX_IDLE_TIME,CONTEXT_NAME,'',false,true);
	session_set_cookie_params(0,CONTEXT_NAME,'',false,true);
	session_start();
	verificar_instalacion();
	//$_SESSION['sybmas.installation.installed']=true;
	$requested_uri=$_SERVER['REQUEST_URI'];

	/*
	 * Verificacion de la instalacion del Sybmas
	 */
	$installed=$_SESSION['sybmas.installation.installed'];
	//echo $installed;
	$uri_inicio='/\\'.CONTEXT_NAME.'\/inicio\/.*/';

	//echo $uri_inicio."<br>";
	//echo $requested_uri."<br>";
	//echo preg_match($uri_inicio,$requested_uri);

	if(!$installed && !preg_match($uri_inicio,$requested_uri)){
		$redirect_to="Location: ".CONTEXT_NAME."/inicio";
		header($redirect_to);
		return;
	}

	/*
	 * Verifica que el nombre de usuario ha iniciado previamente una sesión con 
	 * un nombre de usuario válido, verificando la existencia de ese nombre de 
	 * usuario como una variabsle de sesión llamada 'sybmas.user' 
	 */
	if(!array_key_exists('sybmas.user.name',$_SESSION)){
		//setcookie("sybmas_requested_url",$requested_uri,time()+SYBMAS_MAX_IDLE_TIME,CONTEXT_NAME);
		setcookie("sybmas_requested_url",$requested_uri,0,CONTEXT_NAME);
		header("Location: ".LOGIN_PAGE);
	}else{
		if(array_key_exists('sybmas_requested_url',$_COOKIE)){
			setcookie("sybmas_requested_url",'',time()-3600);
		}
	}
}

/**
 *
 * @param $user Nombre de usuario que sera empleado para iniciar la sesion
 * @param $password Password que sera empleado para iniciar la sesion
 * @return TRUE si la sesion fue iniciada exitosamente, FALSE en otro caso
 */
function iniciar_sesion($user,$password){
	$r=FALSE;
	$conn=start_sybuser_connection($user,$password);
	if($conn){
		$_SESSION['sybmas.user.name']=$user;
		$_SESSION['sybmas.user.password']=$password;
		$r=TRUE;
		@sybase_close($conn);
		cargar_datos_usuario();
		obtener_roles();
	}
	return $r;
}

function invalidar_sesion(){
	session_unset();
	session_destroy();
}

function obtener_nombre_usuario(){
	if(array_key_exists('sybmas.user.name',$_SESSION)){
		return $_SESSION['sybmas.user.name'];
	}else{
		return false;
	}
}

/**
 * Obtiene el nombre de usuario dentro de una base de datos, para el login
 * actual
 * @param $dbname
 * @return Nombre de usuario para la base propocionada, NULL si no existe usuario asociado
 */
function obtener_usuario_db($dbname=""){
	$login=obtener_nombre_usuario();
	$user=null;
	if($dbname==""){
		$dbname=$_SESSION['sybmas.user.dbname'];
	}
	$isDbo=false;
	$name=obtener_nombre_usuario();
	$conn=start_sybmas_connection();
	if(!$conn){
		echo "La conexion con la base de datos no pudo ser establecida";
		die();
	}
	$query="SELECT u.name ".
			"FROM master..syslogins l,".$dbname."..sysusers u ".
			"WHERE  l.name='$login' AND l.suid=u.suid";

	$result=@sybase_query($query);
	if($data=sybase_fetch_row($result)){
		$user=$data[0];
	}
	sybase_free_result($result);
	//sybase_close($conn);
	return $user;
}

/**
 * Determina si el login actual esta asociado al rol proporcionado
 * @param unknown_type $rol
 * @return unknown_type
 */
function usuario_en_rol($rol){
	$roles=obtener_roles();
	$isUserInRole=array_search($rol,$roles);
	return !is_bool($isUserInRole);
}

/**
 * Determina si el usuario actual es el dbo de la base de datos
 * @param $dbname
 * @return unknown_type
 */
function usuario_es_dbo($dbname=""){
	$username=obtener_usuario_db($dbname);
	$isDbo=$username=='dbo';
	return $isDbo;
}



function cargar_datos_usuario(){
	$name=obtener_nombre_usuario();
	$conn=start_sybmas_connection();
	if(!$conn){
		echo "La conexion con la base de datos no pudo ser establecida";
		die();
	}
	$query="SELECT suid,status,dbname,language,fullname FROM master..syslogins  WHERE name='$name'";
	$result=@sybase_query($query);
	while($data=@sybase_fetch_array($result)){
		$_SESSION['sybmas.user.suid']=$data['suid'];
		$_SESSION['sybmas.user.status']=$data['status'];
		$_SESSION['sybmas.user.dbname']=$data['dbname'];
		$_SESSION['sybmas.user.language']=$data['language'];
		$_SESSION['sybmas.user.fullname']=$data['fullname'];
	}
	sybase_free_result($result);
	sybase_close($conn);
}

/**
 * Obtiene un arreglo con los roles asociados al login existente en la variable de sesion 'sybmas.user.name'
 * @return
 */
function obtener_roles(){
	if( array_key_exists('sybmas.user.roles',$_SESSION) ){
		$roles=$_SESSION['sybmas.user.roles'];
	}else{
		$roles=array();
		if(!array_key_exists('sybmas.user.suid',$_SESSION)){
			cargar_datos_usuario();
		}
		$suid=$_SESSION['sybmas.user.suid'];
		$conn=start_sybmas_connection();
		$query="SELECT r.name FROM master..syssrvroles r,master..sysloginroles lr WHERE lr.suid=$suid AND r.srid=lr.srid";
		$result=sybase_query($query);
		while($data=sybase_fetch_array($result)){
			$roles[]=$data['name'];
		}
		sybase_free_result($result);
		sybase_close($conn);
		$_SESSION['sybmas.user.roles']=$roles;
	}
	return $roles;
}
?>